﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.Entity.Validation;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MIZ.Models
{
    [MetadataType(typeof(Lichaams_RegioValidationClass))]
    public partial class LichaamsRegio
    {      
        public static LichaamsRegio ReturnViews(int id)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            return db.LichaamsRegioSet.Find(id);
        }

        public static LichaamsRegio Create(LichaamsRegio lichaamsregio)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            if (lichaamsregio.Beschrijving == "" || lichaamsregio.Beschrijving == null) lichaamsregio.Beschrijving = "n.v.t.";

            db.LichaamsRegioSet.Add(lichaamsregio);
            db.SaveChanges();

            return lichaamsregio;
        }

        public static LichaamsRegio Edit(LichaamsRegio lichaamsregio)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            db.Entry(lichaamsregio).State = EntityState.Modified;
            db.SaveChanges();

            return lichaamsregio;
        }

        public static LichaamsRegio Delete(int id)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            LichaamsRegio lichaamsregio = db.LichaamsRegioSet.Find(id);

            List<Meetinstrument> meetinstrumentenlijst = db.MeetinstrumentSet.ToList();

            for (long i = 0; i < meetinstrumentenlijst.LongCount(); i++)
            {
                if (meetinstrumentenlijst[Convert.ToInt32(i)].LichaamsRegio == lichaamsregio)
                {
                    meetinstrumentenlijst[Convert.ToInt32(i)].LichaamsRegio.Remove(lichaamsregio);
                }
            }

            db.LichaamsRegioSet.Remove(lichaamsregio);
            db.SaveChanges();

            return lichaamsregio;
        }

        public static List<LichaamsRegio> ReturnList()
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            return db.LichaamsRegioSet.ToList();
        }

        public static List<SelectListItem> ReturnListCustomLichaamsregio()
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            List<SelectListItem> _ReturnLijst = new List<SelectListItem>();
            List<Meetinstrument> _MeetinstrumentenLijst = db.MeetinstrumentSet.ToList();
            List<LichaamsRegio> _LichaamsregioLijst = new List<LichaamsRegio>();
            List<LichaamsRegio> _UniekeLichaamsregioLijst = new List<LichaamsRegio>();
            Meetinstrument _Meetinstrument = null;
            LichaamsRegio _Lichaamsregio = null;
            bool _Aanwezig = false;

            for (int i = 0; i < _MeetinstrumentenLijst.Count; i++)
            {
                _Meetinstrument = _MeetinstrumentenLijst[i];
                _LichaamsregioLijst = _Meetinstrument.LichaamsRegio.ToList();
                for (int j = 0; j < _LichaamsregioLijst.Count; j++)
                {
                    _Lichaamsregio = _LichaamsregioLijst[j];
                    for (int k = 0; k < _UniekeLichaamsregioLijst.Count; k++)
                    {
                        if (!_Aanwezig)
                        {
                            if (_UniekeLichaamsregioLijst[k] == _Lichaamsregio)
                            {
                                _Aanwezig = true;
                            }
                        }
                    }
                    if (!_Aanwezig)
                    {
                        _UniekeLichaamsregioLijst.Add(_Lichaamsregio);
                    }
                    else
                    {
                        _Aanwezig = false;
                    }
                }
            }

            for (int i = 0; i < _UniekeLichaamsregioLijst.Count; i++)
            {
                string s = _UniekeLichaamsregioLijst[i].Lichaams_Regio;
                _ReturnLijst.Add(new SelectListItem() { Text = s, Value = s });
            }

            return _ReturnLijst;
        }

        /// <summary>
        /// Voert de keuze door die gemaakt werd in de dropdownlist
        /// </summary>
        /// <param name="gekozenLichaamsRegio"></param>
        /// <returns>ICollection<Meetinstrument></returns>
        public static ICollection<Meetinstrument> VoerKeuzeLichaamsRegioDoor(string gekozenLichaamsRegio)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            ICollection<Meetinstrument> _ReturnLijst = null;
            if (gekozenLichaamsRegio == null || gekozenLichaamsRegio == "")
            {
                _ReturnLijst = db.MeetinstrumentSet.ToList();
            }
            else
            {                
                LichaamsRegio _Lichaamsregio = ZoekGekozenLichaamsRegio(db, gekozenLichaamsRegio);
                _ReturnLijst = _Lichaamsregio.Meetinstrument.ToList();
            }
            return _ReturnLijst;
        }

        /// <summary>
        /// Zoekt de lichaamsregio o.b.v. de gekozen index van de dropdownlist
        /// </summary>
        /// <param name="db"></param>
        /// <param name="gekozenLichaamsRegio"></param>
        /// <returns>Lichaamsregio</returns>
        private static LichaamsRegio ZoekGekozenLichaamsRegio(DatabaseModelContainer db, string gekozenLichaamsRegio)
        {
            LichaamsRegio _Lichaamsregio = null;
            List<LichaamsRegio> _LichaamsregioLijst = db.LichaamsRegioSet.ToList();

            for (int i = 0; i < _LichaamsregioLijst.Count; i++)
            {
                if (_LichaamsregioLijst[i] != null)
                {
                    string s = _LichaamsregioLijst[i].Lichaams_Regio.ToString();
                    if (s == gekozenLichaamsRegio)
                    {
                        _Lichaamsregio = _LichaamsregioLijst[i];
                    }
                }
            }
            return _Lichaamsregio;
        }
    }


}